home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / gundealr.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  4KB  |  158 lines

  1. /***************************************************************************
  2.  
  3.   vidhrdw.c
  4.  
  5.   Functions to emulate the video hardware of the machine.
  6.  
  7. ***************************************************************************/
  8.  
  9. #include "driver.h"
  10.  
  11.  
  12.  
  13. unsigned char *gundealr_bg_videoram,*gundealr_fg_videoram;
  14.  
  15. static struct tilemap *bg_tilemap,*fg_tilemap;
  16. static int flipscreen;
  17.  
  18.  
  19.  
  20. /***************************************************************************
  21.  
  22.   Callbacks for the TileMap code
  23.  
  24. ***************************************************************************/
  25.  
  26. static void get_bg_tile_info(int tile_index)
  27. {
  28.     unsigned char attr = gundealr_bg_videoram[2*tile_index+1];
  29.     SET_TILE_INFO(0,gundealr_bg_videoram[2*tile_index] + ((attr & 0x07) << 8),(attr & 0xf0) >> 4)
  30. }
  31.  
  32. static UINT32 gundealr_scan(UINT32 col,UINT32 row,UINT32 num_cols,UINT32 num_rows)
  33. {
  34.     /* logical (col,row) -> memory offset */
  35.     return (row & 0x0f) + ((col & 0x3f) << 4) + ((row & 0x10) << 6);
  36. }
  37.  
  38. static void get_fg_tile_info(int tile_index)
  39. {
  40.     unsigned char attr = gundealr_fg_videoram[2*tile_index+1];
  41.     SET_TILE_INFO(1,gundealr_fg_videoram[2*tile_index] + ((attr & 0x03) << 8),(attr & 0xf0) >> 4)
  42. }
  43.  
  44.  
  45.  
  46. /***************************************************************************
  47.  
  48.   Start the video hardware emulation.
  49.  
  50. ***************************************************************************/
  51.  
  52. int gundealr_vh_start(void)
  53. {
  54.     bg_tilemap = tilemap_create(get_bg_tile_info,tilemap_scan_cols,TILEMAP_OPAQUE,      8, 8,32,32);
  55.     fg_tilemap = tilemap_create(get_fg_tile_info,gundealr_scan,    TILEMAP_TRANSPARENT,16,16,64,32);
  56.  
  57.     if (!bg_tilemap || !fg_tilemap)
  58.         return 1;
  59.  
  60.     fg_tilemap->transparent_pen = 15;
  61.  
  62.     return 0;
  63. }
  64.  
  65.  
  66.  
  67. /***************************************************************************
  68.  
  69.   Memory handlers
  70.  
  71. ***************************************************************************/
  72.  
  73. WRITE_HANDLER( gundealr_bg_videoram_w )
  74. {
  75.     if (gundealr_bg_videoram[offset] != data)
  76.     {
  77.         gundealr_bg_videoram[offset] = data;
  78.         tilemap_mark_tile_dirty(bg_tilemap,offset/2);
  79.     }
  80. }
  81.  
  82. WRITE_HANDLER( gundealr_fg_videoram_w )
  83. {
  84.     if (gundealr_fg_videoram[offset] != data)
  85.     {
  86.         gundealr_fg_videoram[offset] = data;
  87.         tilemap_mark_tile_dirty(fg_tilemap,offset/2);
  88.     }
  89. }
  90.  
  91. WRITE_HANDLER( gundealr_paletteram_w )
  92. {
  93.     int r,g,b,val;
  94.  
  95.  
  96.     paletteram[offset] = data;
  97.  
  98.     val = paletteram[offset & ~1];
  99.     r = (val >> 4) & 0x0f;
  100.     g = (val >> 0) & 0x0f;
  101.  
  102.     val = paletteram[offset | 1];
  103.     b = (val >> 4) & 0x0f;
  104.     /* TODO: the bottom 4 bits are used as well, but I'm not sure about the meaning */
  105.  
  106.     r = 0x11 * r;
  107.     g = 0x11 * g;
  108.     b = 0x11 * b;
  109.  
  110.     palette_change_color(offset / 2,r,g,b);
  111. }
  112.  
  113. WRITE_HANDLER( gundealr_fg_scroll_w )
  114. {
  115.     static unsigned char scroll[4];
  116.  
  117.     scroll[offset] = data;
  118.     tilemap_set_scrollx(fg_tilemap,0,scroll[1] | ((scroll[0] & 0x03) << 8));
  119.     tilemap_set_scrolly(fg_tilemap,0,scroll[3] | ((scroll[2] & 0x03) << 8));
  120. }
  121.  
  122. WRITE_HANDLER( yamyam_fg_scroll_w )
  123. {
  124.     static unsigned char scroll[4];
  125.  
  126.     scroll[offset] = data;
  127.     tilemap_set_scrollx(fg_tilemap,0,scroll[0] | ((scroll[1] & 0x03) << 8));
  128.     tilemap_set_scrolly(fg_tilemap,0,scroll[2] | ((scroll[3] & 0x03) << 8));
  129. }
  130.  
  131. WRITE_HANDLER( gundealr_flipscreen_w )
  132. {
  133.     flipscreen = data;
  134.     tilemap_set_flip(ALL_TILEMAPS,flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
  135. }
  136.  
  137.  
  138.  
  139. /***************************************************************************
  140.  
  141.   Display refresh
  142.  
  143. ***************************************************************************/
  144.  
  145. void gundealr_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
  146. {
  147.     tilemap_update(ALL_TILEMAPS);
  148.  
  149.     palette_init_used_colors();
  150.     if (palette_recalc())
  151.         tilemap_mark_all_pixels_dirty(ALL_TILEMAPS);
  152.  
  153.     tilemap_render(ALL_TILEMAPS);
  154.  
  155.     tilemap_draw(bitmap,bg_tilemap,0);
  156.     tilemap_draw(bitmap,fg_tilemap,0);
  157. }
  158.